import { nextTick } from './util/next-tick.js'
import { createElement, createTextNode } from './vdom/index.js'

export function renderMixin(Vue) {
  /**
   * 生成 vnode
   */
  Vue.prototype._render = function () {
    const vm = this
    // 获取模板编译生产的render方法
    const { render } = vm.$options
    // 生成vnode
    const vnode = render.call(vm)
    return vnode
  }

  Vue.prototype.$nextTick = nextTick

  /**
   * 创建 虚拟dom 元素
   */
  Vue.prototype._c = function (...args) {
    return createElement(this, ...args)
  }

  /**
   * 创建 虚拟dom 文本
   */
  Vue.prototype._v = function (text) {
    return createTextNode(text)
  }

  Vue.prototype._s = function (val) {
    return val === null
      ? ''
      : typeof val === 'object'
      ? JSON.stringify(val)
      : val
  }
}
